package solutionsdemo;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 黎鹤舞
 * Date: 2024-02-03
 * Time: 1:04
 */

/**
 * 给你二叉树的根节点 root ，请你采用前序遍历的方式，将二叉树转化为一个由括号和整数组成的字符串，返回构造出的字符串。
 * 空节点使用一对空括号对 "()" 表示，转化后需要省略所有不影响字符串与原始二叉树之间的一对一映射关系的空括号对。
 * 输入：root = [1,2,3,4]
 * 输出："1(2(4))(3)"
 * 解释：初步转化后得到 "1(2(4)())(3()())" ，但省略所有不必要的空括号对后，字符串应该是"1(2(4))(3)" 。
 */
public class BinaryTreeCreateStr {

    //主调用方法:
    public String tree2str(TreeNode root) {
        StringBuffer sb = new StringBuffer();
        createStr(root,sb);
        String str = sb.toString();
        return str;
    }

    //由于题目要求是创建字符串，所以需要传入一个字符串参数，并返回一个str类型的数据
    public void createStr(TreeNode root, StringBuffer sb){   //这里使用的是StringBuffer是考虑频繁操作字符串
        if(root == null) {
            return;
        }

        sb.append(root.val);
        //先遍历左树
        if(root.left != null) {//如果左树不为空
            sb.append("(");
            createStr(root.left,sb);
            sb.append(")");
        }else {                 //如果左树为空
            if(root.right != null) {
                sb.append("()");
            }else {
                return;
            }
        }

        //后遍历右树
        if(root.right != null) {
            sb.append("(");
            createStr(root.right,sb);
            sb.append(")");
        }else {
            return;
        }

    }
}
